const db = uniCloud.database();
export default {
  // 开启命名空间
  namespaced: true,

  // state 数据
  state: () => ({
    //所有订单列表
    orderList: JSON.parse(uni.getStorageSync('orderList') || '[]'),
    addressList: JSON.parse(uni.getStorageSync('addressList') || '[]'),
    // 收货地址
    address: JSON.parse(uni.getStorageSync('address') || '{}'),
    addressEnd: JSON.parse(uni.getStorageSync('addressEnd') || '{}'),
    token: uni.getStorageSync('token') || '',
    // 用户的基本信息
    userinfo: JSON.parse(uni.getStorageSync('userinfo') || '{}'),
    // 重定向的 object 对象 { openType, from }
    redirectInfo: null
  }),

  // 方法
  mutations: {
    // 更新订单列表数据
    updateOrderList(state, orderList) {
      state.orderList = orderList;
      this.commit('m_user/saveOrderListToStorage')
    },
    // 1. 定义将 orderList列表 持久化存储到本地 mutations 方法
    saveOrderListToStorage(state) {
      uni.setStorageSync('orderList', JSON.stringify(state.orderList))
    },
    // 更新地址数据
    updateAddressList(state, addressList) {
      state.addressList = addressList;
      this.commit('m_user/saveAddressListToStorage')
    },
    // 1. 定义将 addressList列表 持久化存储到本地 mutations 方法
    saveAddressListToStorage(state) {
      uni.setStorageSync('addressList', JSON.stringify(state.addressList))
    },
    // 更新收货地址
    updateAddress(state, address) {
      state.address = address;
      this.commit('m_user/saveAddressToStorage')
    },
    // 1. 定义将 address 持久化存储到本地 mutations 方法
    saveAddressToStorage(state) {
      uni.setStorageSync('address', JSON.stringify(state.address))
    },
    // 更新收货地址
    updateAddressEnd(state, addressEnd) {
      state.addressEnd = addressEnd;

      this.commit('m_user/saveAddressEndToStorage')
    },
    // 1. 定义将 address 持久化存储到本地 mutations 方法
    saveAddressEndToStorage(state) {
      uni.setStorageSync('addressEnd', JSON.stringify(state.addressEnd))
    },
    // 更新用户的基本信息
    updateUserInfo(state, userinfo) {
      state.userinfo = userinfo
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveUserInfoToStorage 方法，将 userinfo 对象持久化存储到本地
      this.commit('m_user/saveUserInfoToStorage')
    },
    // 将 userinfo 持久化存储到本地
    saveUserInfoToStorage(state) {
      uni.setStorageSync('userinfo', JSON.stringify(state.userinfo))
    },
    // 更新 token 字符串
    updateToken(state, token) {
      state.token = token
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveTokenToStorage 方法，将 token 字符串持久化存储到本地
      this.commit('m_user/saveTokenToStorage')
    },
    // 将 token 字符串持久化存储到本地
    saveTokenToStorage(state) {
      uni.setStorageSync('token', state.token)
    },
    //统一管理state数据
    clearAllState(state) {
      state.address = {};
      state.userInfo = {};
      state.token = '';
      state.addressList = [];
      state.addressEnd = {}
      state.orderList = []
    }

  },
  actions: {
    //检查用户是否已经注册
    async hasItBeenRegistered({commit}, phone) {
      const {
        result: res
      } = await db.collection('my_user').where({
        user_phone: phone
      }).get()
      const isRegistered = res.data.length > 0 ? true : false
      if (isRegistered) {
        commit('updateUserInfo', res.data[0])
        console.log(res.data[0]);
      } else { //新增用户
        const myUser = {
          user_phone: phone,
          avatarUrl: 'https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132'
        }
        //根据手机号新增用户
        const resuiltInfo = await db.collection("my_user").add(myUser)
        //查询新增用户信息
        const {
          result: newUserInfo
        } = await db.collection("my_user").where({
          _id: resuiltInfo.result.id
        }).get();
        console.log(newUserInfo.data[0]);
        commit('updateUserInfo', newUserInfo.data[0])
        // return newUserInfo.data[0]
      }
    },
    //修改头像
    async changeUserAvatar({commit},user){
      const userInfo={...user}
      delete userInfo._id
      //去除_id属性
      const res = await db.collection('my_user').where({
        user_phone:user.user_phone
      }).update(userInfo)
      commit('updateUserInfo',user)
      return res
    }

  },
  // 数据包装器
  getters: {},
}